#创建字典
mydict={"张三":1,"李四":2,"王五":3}
print(dict,type(mydict))

#用dict()函数创建字典
d=dict(张三=1,李四=2,王五=3)
print(d)

#键不能重复
d=dict({"张三":1,"李四":2,"王五":3,"张三":4})
print(d,type(d))


#通过键查找值
color_dict = {'purple': '紫色',
              'green': '绿色',
              'black': '黑色'}
print(color_dict['purple'])
#不能找到不存在的键
# print(color_dict['red']) #会报错

#可以用in先判断键是否存在
if 'red' in color_dict:
    print(color_dict['red'])
else:
    print('没有这个键')



#判断星期几
weekday = {
    "M": "Monday",
    "Tu": "Tuesday",
    "W": "Wednesday",
    "Th": "Thursday",
    "F": "Friday",
    "Sa": "Saturday",
    "Su": "Sunday"
}
a = input("请输入星期的首字母或前两个字母（如M、Tu等）: ")
if a in weekday:
    print(weekday[a])
else:
    print("输入有误，请重新输入。")

#字典操作：update添加更改元素 或者直接 键添加元素
add_dict = {'stu1': '小明'}
add_dict.update(stu2='小刚')
add_dict['stu3'] = '小兰'
print(add_dict)


#字典操作：添加元素
a = {'name':'张三', 'age':23,'sex':'男'}
b = dict(name='张三', age=23, sex='男')
a['phone'] = '13852141236'  # 使用键访问赋值添加元素
a.update({'adress':'信阳市', 'ID':'411587636235552221'})  # 使用update
print(a)


#修改字典元素 字典可通过update()方法或指定的键修改元素。
modify_dict = {'stu1': '小明', 'stu2': '小刚', 'stu3': '小兰'}
modify_dict.update(stu2='张强')
modify_dict['stu3'] = '刘婷'
print(modify_dict)



#字典操作：提取元素
a = {'name':'张三', 'age':23,'sex':'男'}
b = dict(name='张三', age=23, sex='男')
print(a['name'])  # 使用索引来提取字典的值
print(a.get('name'))  # 使用get()方法提取值

#字典删除操作：pop
per_info = {'001': '张三', '002': '李四', '003': '王五', '004': '赵六', }
per_info.pop('001')
print(per_info)

#del删除字典
per_info = {'001': '张三', '002': '李四', '003': '王五', '004': '赵六'}
del per_info['001']
print(per_info)


#popitem随机删除
per_info = {'001': '张三', '002': '李四', '003': '王五', '004': '赵六'}
per_info.popitem()
print(per_info)

#clear清空字典
per_info = {'001': '张三', '002': '李四', '003': '王五', '004': '赵六', }
per_info.clear()
print(per_info)

#查看字典元素items
per_info = {'001': '张三', '002': '李四', '003': '王五'}
print(per_info.items())

#字典支持迭代，可以用for循环遍历
per_info = {'001': '张三', '002': '李四', '003': '王五'}
for i in per_info.items():
      print(i)

#keys()方法 返回字典的所有键。
per_info = {'001': '张三', '002': '李四', '003': '王五'}
print(per_info.keys())

#支持迭代
per_info = {'001': '张三', '002': '李四', '003': '王五'}
for i in per_info.keys():
     print(i)

#values()方法 返回字典的所有值。
per_info = {'001': '张三', '002': '李四', '003': '王五'}
print(per_info.values())
#支持迭代
per_info = {'001': '张三', '002': '李四', '003': '王五'}
for i in per_info.values():
     print(i)

#通讯录案例
#先设置一个空字典
phone_book = {}

#添加联系人
def 添加联系人(name, phone):
    phone_book[name] = phone
    print(f"添加联系人：{name}，电话：{phone}")

#查询联系人
def 查询联系人(name):
    if name in phone_book:
        print(f"{name}的电话是：{phone_book[name]}")
    else:
        print(f"没有找到联系人：{name}")

#删除联系人
def 删除联系人(name):
    if name in phone_book:
        del phone_book[name]
        print(f"删除联系人：{name}")
    else:
        print(f"没有找到联系人：{name}")

#显示所有联系人
def 显示所有联系人():
    for name in phone_book:
        print(f"联系人：{name}，电话：{phone_book[name]}")
    #换种方式写
    # for name,phone in phone_book.items():
    #     print(f"联系人：{name}，电话：{phone}")
    #换种方式写
    # for name in phone_book.keys():
    #     print(f"联系人：{name}，电话：{phone_book[name]}")
    #vla


#主程序
while True:
    print("1.添加联系人")
    print("2.查询联系人")
    print("3.删除联系人")
    print("4.显示所有联系人")
    print("5.退出")

    choice = input("请输入你的选择：")

    if choice == '1':
        name = input("请输入联系人姓名：")
        phone = input("请输入联系人电话：")
        添加联系人(name, phone)
    elif choice == '2':
        name = input("请输入要查询的联系人姓名：")
        查询联系人(name)
    elif choice == '3':
        name = input("请输入要删除的联系人姓名：")
        删除联系人(name)
    elif choice == '4':
        显示所有联系人()
    elif choice == '5':
        break
    else:
        print("输入错误，请重新选择。")


#字典作为函数参数
def fun(a):
    a["name"]="aaa"
    print("函数内修改后：",a)

a={"name":"张三","age":23}
print("函数外修改前：",a)
fun(a)
print("函数外修改后：",a)

#字典作为函数返回值
def fun():
    a={"name":"张三","age":23}
    return a

a=fun()
print(a)

#字典与字典参数 **kargs
def fun(x,y=2,**kargs):
    print(x,y)
    print(kargs)

fun(1,2)
fun(1,2,a=3,b=4)
fun(1,2,a=3,b="abc",c=4.5)

